from core.init_file import *
from apps import *
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QHBoxLayout, QWidget
from qfluentwidgets import (ComboBox, PrimaryPushButton, ProgressBar, PushButton,
                            StrongBodyLabel, setTheme, Theme, FluentIcon)
from core.thread import *


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.thread = None

        self.app = App()  # 实例化App类
        self.init_ui()

    def init_ui(self):

        setTheme(Theme.LIGHT)  # 设置浅色主题（也可用Theme.DARK）

        self.setWindowTitle("任务处理器")
        self.resize(700, 200)  # 增加宽度以容纳更多按钮

        # 主窗口和中心部件
        main_widget = QWidget()
        self.setCentralWidget(main_widget)

        # 主布局（垂直）
        main_layout = QVBoxLayout(main_widget)
        main_layout.setSpacing(15)
        main_layout.setContentsMargins(30, 20, 30, 30)

        # 第一层：水平布局（下拉框+按钮）
        layout_top = QHBoxLayout()

        self.combo_task = ComboBox()
        self.combo_task.setFixedWidth(200)
        self.combo_task.addItems(self.app)
        self.combo_task.setCurrentIndex(0)

        self.btn_init = PrimaryPushButton("预处理")
        self.btn_init.setIcon(FluentIcon.SETTING)
        self.btn_init.setFixedWidth(120)

        self.btn_config = PrimaryPushButton("刷新设备")
        self.btn_config.setIcon(FluentIcon.SETTING)
        self.btn_config.setFixedWidth(120)

        # 添加保存文档按钮
        self.btn_save = PrimaryPushButton("保存文档")
        self.btn_save.setIcon(FluentIcon.SAVE)
        self.btn_save.setFixedWidth(120)
        self.btn_save.setToolTip("手动保存当前报告")

        layout_top.addWidget(self.combo_task)
        layout_top.addStretch(1)
        layout_top.addWidget(self.btn_init)
        layout_top.addWidget(self.btn_config)
        layout_top.addWidget(self.btn_save)  # 添加保存按钮到布局

        # 第二层：进度条
        self.progress_bar = ProgressBar()
        self.progress_bar.setAlignment(Qt.AlignCenter)
        self.progress_bar.setValue(0)

        # 第三层：水平布局（标签+按钮）
        layout_bottom = QHBoxLayout()

        self.btn_start = PushButton("开始", self)
        self.btn_start.setIcon(FluentIcon.PLAY)
        self.btn_start.setFixedWidth(120)

        self.btn_cancel = PushButton("取消", self)
        self.btn_cancel.setIcon(FluentIcon.CLOSE)
        self.btn_cancel.setFixedWidth(120)
        self.btn_cancel.setEnabled(False)

        if self.combo_task.count() == 0:
            self.btn_start.setEnabled(False)
            self.lbl_status = StrongBodyLabel("未连接到设备")
        else:
            self.btn_start.setEnabled(True)
            self.lbl_status = StrongBodyLabel("准备就绪")

        layout_bottom.addWidget(self.lbl_status)
        layout_bottom.addStretch(1)
        layout_bottom.addWidget(self.btn_start)
        layout_bottom.addSpacing(10)
        layout_bottom.addWidget(self.btn_cancel)

        # 添加所有部件到主布局
        main_layout.addLayout(layout_top)
        main_layout.addWidget(self.progress_bar)
        main_layout.addLayout(layout_bottom)

        # 连接信号
        self.btn_init.clicked.connect(self.on_init)
        self.btn_start.clicked.connect(self.on_start)
        self.btn_cancel.clicked.connect(self.on_cancel)
        self.btn_config.clicked.connect(self.refresh_devices)
        self.btn_save.clicked.connect(self.on_save)  # 连接保存按钮信号

    def on_save(self):
        """手动保存报告"""
        success, message = self.app.save_report()
        self.lbl_status.setText(message)
        if success:
            logger.info(message)
        else:
            logger.error(message)

    def on_init(self):
        init_file(self.lbl_status)

    def refresh_devices(self):
        self.app.adb.get_device()
        self.combo_task.clear()
        self.combo_task.addItems(self.app)

        if self.combo_task.count() == 0:
            self.btn_start.setEnabled(False)
            self.lbl_status.setText("未连接到设备")
        else:
            self.btn_start.setEnabled(True)
            self.lbl_status.setText("准备就绪")

    def on_start(self):
        self.lbl_status.setText("任务进行中...")
        # self.progress_bar.setValue(50)  # 模拟进度
        self.thread = WorkerThread(
            self.combo_task.currentText(), self.app, self.progress_bar, self.lbl_status
        )
        self.thread.start()

        self.btn_start.setEnabled(False)
        self.btn_cancel.setEnabled(True)
        self.thread.finished.connect(self.on_finished)

    def on_cancel(self):
        self.thread.terminate()
        self.lbl_status.setText("任务已取消")
        # self.progress_bar.setValue(0)
        self.btn_start.setEnabled(True)
        self.btn_cancel.setEnabled(False)

    def on_finished(self):
        self.lbl_status.setText("任务已完成")
        self.progress_bar.setValue(100)
        self.btn_start.setEnabled(True)
        self.btn_cancel.setEnabled(False)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())